//
// Description: 868. 筛质数
// Created by Loading on 2022/5/24.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 1e6 + 10;

// 质数个数
int cnt = 0;
// true 为合数，false 为质数
bool st[N];
// 储存质数
int primes[N];

void get_primes(int n) {
    for (int i = 2; i <= n; ++i) {
        // i 是质数
        if (!st[i]) {
            primes[cnt++] = i;
        }
        // 枚举质数表
        for (int j = 0; primes[j] <= n / i; ++j) {
            st[primes[j] * i] = true; // 任何情况下，primes[j] 都一定是 primes[j] * i 的最小质因子
            if (i % primes[j] == 0) { // 此时，primes[j] 一定是 i 的最小质因子
                break;
            }
        }
    }
}

int main() {
    int n;
    cin >> n;

    get_primes(n);

    cout << cnt << endl;

    return 0;
}